/**
 * Created by 追风少年 on 2018/6/6.
 */

/**
 * 创建拖动list
 **/
function createSlideOptions () {
    var options = {
        placeholder: "placeholder-style",
        opacity: 0.6,
        scroll:false,
        cancel:'.fixed',
        connectWith: '.sortlist',   //允许sortable对象连接另一个sortable对象，可将item元素拖拽到另一个中。 值为jquery选择器
        dropOnEmpty: true,  //是否允許拖拽到一個空的sortable对象中。
        cursor: 'crosshair',
        over: function(event, ui) {
            // console.log("ui=",ui);
            // console.log("item:",ui.item);
            //限制普通文章拉入此sortable
            //当其他sortable对象中一个元素拖拽移入此sortable对象后触发此事件。
            // if(ui.item.attr("is_slide")!="0"){
            //     //不是幻灯
            //     ui.item.sortable.cancel();
            // }
        }

    };
    return options;
}

/**
 * 创建结果拖动配置
 **/
function createResultOptions () {
    var options = {
        placeholder: "placeholder-style",
        opacity: 0.6,
        cancel:'.fixed',
        helper:'clone',
        connectWith: '.sortlist',   //允许sortable对象连接另一个sortable对象，可将item元素拖拽到另一个中。 值为jquery选择器
        //dropOnEmpty: true,  //是否允許拖拽到一個空的sortable对象中。
        scroll:false,   //如果设置成true，则元素被拖动到页面边缘时，会自动滚动。
        scrollSensitivity: -20,  //设置当元素移动至边缘多少像素时，便开始滚动页面。
        cursor: 'crosshair',
        over: function(event, ui) {
            // console.log("ui=",ui);
            // console.log("item:",ui.item);
            //限制空文章拉入此sortable
            //当其他sortable对象中一个元素拖拽移入此sortable对象后触发此事件。
            // if(ui.item.attr("id")=="anull"){
            //     //是空
            //     ui.item.sortable.cancel();
            // }
        }

    };
    return options;
}

'use strict';   //启用严格模式
var myapp = angular.module('sortableApp', ['ui.sortable']);

myapp.config(['$httpProvider',
    function ($httpProvider) {
        //解决$http.post取不到值
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
        var param = function (obj) {
            var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
            for (name in obj) {
                value = obj[name];
                if (value instanceof Array) {
                    for (i = 0; i < value.length; ++i) {
                        subValue = value[i];
                        fullSubName = name + '[' + i + ']';
                        innerObj = {};
                        innerObj[fullSubName] = subValue;
                        query += param(innerObj) + '&';
                    }
                }
                else if (value instanceof Object) {
                    for (subName in value) {
                        subValue = value[subName];
                        fullSubName = name + '[' + subName + ']';
                        innerObj = {};
                        innerObj[fullSubName] = subValue;
                        query += param(innerObj) + '&';
                    }
                }
                else if (value !== undefined && value !== null)
                    query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
            }

            return query.length ? query.substr(0, query.length - 1) : query;
        };
        $httpProvider.defaults.transformRequest = [function (data) {
            return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
        }];
    }]);

myapp.controller('inputSupplyChainFrameController', function($scope,$http) {

    $scope.chainModules = [];
    $scope.chainList = [];
    $scope.chainName = "";
    $scope.submitUrl = '/admin/supplyChain/add';

    // 获取所有的服务模块
    $scope.getServiceModel = function(){
        $http.post('/admin/serviceModel/findList',{}).success(function(data,status,headers,config){
            // console.log("/admin/serviceModel/findList",data);
            if(data.status){
                var serviceNames = data.data.map(function(v){return v.service_name;});
                // serviceNames.splice(0,"服务类型");
                $scope.chainModules = serviceNames;
                // console.log("$scope.chainModules",$scope.chainModules);
            }else{
                console.error(data);
                alert("数据加载失败,请联系管理员");
            }
        }).error(function(data,status,headers,config){
            console.error(data);
        });
    };

    // 页面加载完成
    $scope.load = function(){
        var name = $("#flowName").val();
        $scope.getServiceModel();
        if(name != ""){ // is update page
            $scope.submitUrl = '/admin/supplyChain/update';
            $scope.chainName = name;
            $http.post('/admin/supplyChain/findList',{flow_name:name}).success(function(data,status,headers,config){
                // console.log("数据请求成功");
                // console.log(data);
                if(data.status){
                    for (var i = 0; i < data.data.length; i++){
                        var o = data.data[i];
                        $scope.chainList[o.flow_sort] = o.flow_type_name;
                    }
                }else{
                    console.error(data);
                    alert("数据加载失败,请联系管理员");
                }
            }).error(function(data,status,headers,config){
                console.error(data);
            });
        }
    };

    $scope.sortableOptionsList = [createSlideOptions(),createResultOptions()];

    /**
     * 监控基础模块列表
     **/
    var watch_chainModules = $scope.$watchCollection('chainModules',function(newValue,oldValue, scope){
        if(oldValue.length == 0)return false;
        if(newValue.length < oldValue.length){
            $scope.chainModules = oldValue;
        }
    });

    /**
     * 监控结果模块列表
     **/
    var watch_chainModules = $scope.$watchCollection('chainList',function(newValue,oldValue, scope){
        // console.log(newValue);
        for (var i = 0; i < newValue.length; i++){
            if(newValue[i] == undefined){
                $scope.chainList = oldValue;
            }
        }
    });

    $scope.submit = function($event){
        if(Utils.isNull($scope.chainName)){
            layer.msg("请输入流程链名称");
            return false;
        }

        if($scope.chainList.length == 0){
            layer.msg("请配置至少一个流程模块");
            return false;
        }

        var dataStr = "";
        for (var i = 0; i < $scope.chainList.length; i++){
            if(i>0){
                dataStr += ",";
            }
            dataStr += $scope.chainList[i];
        }

        var btn = $event.target;
        btn.disabled = true;
        $http.post($scope.submitUrl,{flow_chain_str:dataStr,flow_name:$scope.chainName}).success(function (ret) {
            console.log(ret);
            if(ret.status){
                layer.alert(ret.msg, {
                    icon: 1,
                    skin: 'layer-ext-moon',
                    yes:function(index){
                        layer.close(index);
                        parent.closeWinAndFlush();
                    }
                });
                return false;
            }else{
                btn.disabled = false;
                return;
            }
        }).error(function(ret){
            btn.disabled = false;
            console.error("err:"+ret);
        });

    };

});